package TestExercises05;

import java.io.File;
import java.util.*;

//File文件练习6
/*
    需求:
        统计一个文件夹中每种文件的个数并打印。(考虑子文件夹)
    打印格式如下:
        txt:3个
        doc:4个
        jpg:6个

        包含知识点：File、递归、Map集合
 */
public class Test06 {
    public static void main(String[] args) {

        File file = new File("D:\\工作");

        HashMap<String, Integer> hashMap = getCount(file);

        System.out.println(hashMap);

    }


    //定义方法
    /*
        作用：统计一个文件夹中每种文件的个数
        参数：要统计的那个文件夹
        返回值：用来统计map集合   键：后缀名  值：次数

        a.txt
        a.a.txt
        aaa
     */
    public static HashMap<String, Integer> getCount(File src) {
        //1、定义集合用来统计
        HashMap<String, Integer> hm = new HashMap<>();
        //2、进入src文件夹
        File[] files = src.listFiles();
        //3、遍历数组
        if (files != null) {
            for (File file : files) {
                //4、判断，如果是文件，进行统计
                if (file.isFile()) {
                    String name = file.getName();
                    String[] arr = name.split("\\.");
                    if (arr.length >= 2) {
                        String endName = arr[arr.length - 1];
                        if (hm.containsKey(endName)) {
                            //存在
                            int count = hm.get(endName);
                            count++;
                            hm.put(endName, count);
                        } else {
                            //不存在
                            hm.put(endName, 1);
                        }
                    }
                } else {
                    //5、判断，如果是文件夹，进行递归
                    //sonMap里面是子文件夹中每一种文件的个数
                    HashMap<String, Integer> sonMap = getCount(file);
                    Set<Map.Entry<String, Integer>> entries = sonMap.entrySet();
                    //遍历sonMap把里面的值累加到hm当中
                    for (Map.Entry<String, Integer> entry : entries) {
                        String key = entry.getKey();
                        int value = entry.getValue();
                        if (hm.containsKey(key)) {
                            //存在
                            int count = hm.get(key);
                            count = count + value;
                            hm.put(key, count);
                        } else {
                            hm.put(key, value);
                        }
                    }
                }
            }
        }
        return hm;
    }
}
